package model.repositorio;

import java.util.List;

import javax.persistence.Query;

import model.entidades.Consulta;
import model.entidades.Paciente;
import model.entidades.Usuario;
import model.repositorio.util.ConexaoBD;

public class ConsultaDAO extends GenericDAOImpl<Consulta>{

	public ConsultaDAO(){
		setEntityManager( ConexaoBD.getEntityManager() );
	}

	public List<Consulta> pesquisaPorParametroDESC(Usuario profissional, Paciente paciente) {

		String hql = "select p from Consulta p where (p.agendamento.profissional = :profissional and p.agendamento.paciente = :paciente) order by p.agendamento.data desc, p.id desc";
		Query consulta = getEntityManager().createQuery(hql);
		consulta.setParameter("profissional", profissional);
		consulta.setParameter("paciente", paciente);

		@SuppressWarnings("unchecked")
		List<Consulta> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado;
		} else {
			return null;
		}

	}

	public List<Consulta> pesquisaPorParametroASC(Usuario profissional, Paciente paciente) {

		String hql = "select p from Consulta p where (p.agendamento.profissional = :profissional and p.agendamento.paciente = :paciente) order by p.agendamento.data, p.id";
		Query consulta = getEntityManager().createQuery(hql);
		consulta.setParameter("profissional", profissional);
		consulta.setParameter("paciente", paciente);

		@SuppressWarnings("unchecked")
		List<Consulta> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado;
		} else {
			return null;
		}

	}
	
	public List<Usuario> pesquisaProfissionaisPorPaciente(Paciente paciente) {

		String hql = "select distinct p.agendamento.profissional from Consulta p where p.agendamento.paciente = :paciente";
		Query consulta = getEntityManager().createQuery(hql);
		consulta.setParameter("paciente", paciente);

		@SuppressWarnings("unchecked")
		List<Usuario> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado;
		} else {
			return null;
		}

	}

}